﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SwitBusiness
{
    /// <summary>
    /// Bir Switche her zaman bağlanıp kodları test edeyemeyeceğimiz için 
    /// sahte bir Switch oluşturduk burada.
    /// </summary>
    public class DummySwitch: SwitchStrategy
    {
        
        const int PORT_COUNT = 16;

        public List<int> DISCONNECTED_PORT_INDEXES = new List<int>() {0,5}; 
        
        public int MinRate { get; set; }
        public int MaxRate { get; set; }

        Random rate = new Random();
        
        /// <summary>
        /// Burada Switche bağlantı Gerçekleşitiriyoruz. 
        /// </summary>
        /// <returns>Sahte bir swtich olduğu için Sürekli true dönecektir.</returns>
        public override bool ConnectServer()
        {
            MinRate = 0;
            MaxRate = 2;
            return true;
        }
        /// <summary>
        /// Burada örnek bir switchin çıktısını Statusa aktarıyoruz.
        /// </summary>
        public override void CheckStatus()
        {
            StringBuilder result = new StringBuilder();
            result.AppendLine("Port\tName\t\tStatus\t\tVlan\tDuplex\tSpeed\tType");
            for (int i = 0; i < 16; i++)
            {
                if (DISCONNECTED_PORT_INDEXES.Contains(i))
                {
                    result.AppendLine(string.Format("Fa0/{0}\tPort{0}\t\tnotconnect\ttrunk\ta-full\ta-100\t10/100BaseT", i + 1));//Portlardan istediğimiz kadarını burada  notconnect gelmesini sağlıyoruz.
                    continue;
                }
                bool connected = rate.Next(MinRate, MaxRate) == 1;
                result.AppendLine(string.Format("Fa0/{0}\tPort{0}\t\t{1}\t1\tauto\tauto\t10/100BaseT", i + 1, connected ? "connected" : "notconnect")); //Portların connect yada notconnect gelmesini random olarak sağlıyoruz.
            }
            result.AppendLine(@"seTX");
            result.Append(@"S2960_ISD_1#");
            Status =  result.ToString();       
     
        }
    }    
}
